package com.tuju.jetpackfirstdemo.network

import com.ding.library.CaptureInfoInterceptor
import com.tuju.jetpackfirstdemo.utils.HttpLoggingInterceptor
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.converter.scalars.ScalarsConverterFactory

/**
 * object修饰类名表单例模式，直接使用 类名.方法，相当于单例对象实现，返回相同结果.
 * 注意：
 *  1.单例是一个类，同时也是一个具体实例。
 *  （作为类可以继承另一个类，实现接口，有成员属性和成员函数。作为实例可以声明一个类型，不能有构造函数，引用时直接使用名称，多次访问返回同一结果。）
 *
 *  2.单例是延迟初始化的。
 *  （单例在第一次访问时根据内部定义的成员初始化自身，保存在 JVM 堆里，之后再访问的就是堆里的单例对象，不会再次初始化。）
 */
object ServiceCreate {

    private const val BASE_URL = "http://guolin.tech/"

    private val httpClient = OkHttpClient.Builder()
//            .addInterceptor(HttpLoggingInterceptor())

    private val builder = Retrofit.Builder()
            .baseUrl(BASE_URL)
            .client(httpClient.build())
            .addConverterFactory(ScalarsConverterFactory.create())
            .addConverterFactory(GsonConverterFactory.create())

    private val retrofit = builder.build()

    fun <T> create(serviceClass: Class<T>): T = retrofit.create(serviceClass)

}